function isMergeableObjectUtil(value: any): boolean {
  return isNonNullObject(value) && !isSpecial(value)
}

function isNonNullObject(value: any): boolean {
  return !!value && typeof value === 'object'
}

function isSpecial(value: any): boolean {
  var stringValue = Object.prototype.toString.call(value)
  return stringValue === '[object RegExp]' || stringValue === '[object Date]' || isReactElement(value)
}
var canUseSymbol = typeof Symbol === 'function' && Symbol.for
var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7

function isReactElement(value: any): boolean {
  return value.$$typeof === REACT_ELEMENT_TYPE
}
export default isMergeableObjectUtil;